package cn.tannn.cat.tmq.core;

import lombok.AllArgsConstructor;
import lombok.SneakyThrows;

import java.util.concurrent.LinkedBlockingDeque;

/**
 * MQ
 * <p> 存储消息
 *
 * @author <a href="https://t.tannn.cn/">tnnn</a>
 * @version V1.0
 * @date 2024/7/7 下午1:50
 */
public class TMq {
    /**
     * 消息主题
     */
    private String topic;

    /**
     * 消息数据
     */
    private LinkedBlockingDeque<Message> queue = new LinkedBlockingDeque<>();


    public TMq(String topic) {
        this.topic = topic;
    }


    /**
     * 发送消息
     * <p>  将消息存储到 queue
     *
     * @param message 消息
     * @return boolean
     */
    public boolean send(Message message) {
        //
        return queue.offer(message);
    }

    /**
     * 获取消息 （拉模式
     * <p>  queue里获取消息
     *
     * @param timeout 超时时间
     * @return 消息
     */
    @SneakyThrows
    public <T> Message<T> poll(long timeout) {
        return queue.poll(timeout, java.util.concurrent.TimeUnit.MILLISECONDS);
    }
}
